package 代码随想录.哈希表.快乐数;

import java.util.HashSet;

/**lc:202.快乐数
 * link:https://leetcode-cn.com/problems/happy-number/
 * @author ChenweiLin
 * @create 2021-12-15 11:22
 */
public class happyNumber {
    public static void main(String[] args) {

    }

    public boolean isHappy(int n) {
        //出现重复数字即代表陷入了无限循环 即 isHappy应该返回false
        //使用哈希表来确定是否出现重复数字
        HashSet<Integer> set = new HashSet<>();
        set.add(n);
        while (n != 1){
            n = nextNumber(n);
            if (set.contains(n)){
                return false;
            }

            set.add(n);
        }

        return true;

    }

    //辅助函数，为了符合题的规律每一次将该数替换为它每个位置上的数字的平方和
    private int nextNumber(int n){
        int res = 0;
        while (n>0){
            int temp = n % 10;//
            res += temp*temp;//平方和
            n = n/10;//向前进一位
        }

        return res;
    }

}
